package com.zl.bcyappserver.service.retrofit;

import com.zl.bcyappserver.domain.jsonbean.daily.details.DailyDetailsResult;
import com.zl.bcyappserver.domain.jsonbean.daily.mainpage.DailyMainPageResult;
import com.zl.bcyappserver.domain.jsonbean.hottag_catch.HotTagsCatchResult;
import com.zl.bcyappserver.domain.jsonbean.newpeople.details.NewPeopleDetailsResult;
import com.zl.bcyappserver.domain.jsonbean.newpeople.mainpage.NewPeopleMainPageResult;
import com.zl.bcyappserver.domain.jsonbean.tag_analy.TagsAnalyResult;
import com.zl.bcyappserver.domain.jsonbean.tag_catch.TagsCatchResult;
import com.zl.bcyappserver.domain.jsonbean.weekly.mainpage.WeeklyMainPageResult;
import com.zl.bcyappserver.domain.jsonbean.works.UserWorksResult;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by ZhongLeiDev at 2019/12/2
 */
public interface BcyRequestService {

    /**
     * RxJava 模式下获取指定的 Tag 标签下的 Works
     * @param circleId 指定 Tag 的 ID（eg: circle_id=71978）
     * @param since 起始页（eg: since=rec:3）
     * @param sortType 排序规则（eg: sort_type=1）
     * @param gridType 单页显示数量（eg: grid_type=10）
     * @return JsonBean
     */
    @GET("common/circleFeed")
    Observable<TagsAnalyResult> getBcyTagDetail(
            @Query("circle_id") String circleId,
            @Query("since") String since,
            @Query("sort_type") String sortType,
            @Query("grid_type") String gridType
    );

    /**
     * 获取指定的 Tag 标签下的 Works
     * @param circleId 指定 Tag 的 ID（eg: circle_id=71978）
     * @param since 起始页（eg: since=rec:3）
     * @param sortType 排序规则（eg: sort_type=1）
     * @param gridType 单页显示数量（eg: grid_type=10）
     * @return JsonBean
     */
    @GET("common/circleFeed")
    Call<TagsAnalyResult> getBcyTagDetailCommon(
            @Query("circle_id") String circleId,
            @Query("since") String since,
            @Query("sort_type") String sortType,
            @Query("grid_type") String gridType
    );

    /**
     * RxJava 模式获取 Tag  列表
     * @param offset 起始量（eg: offset=20）
     * @return JsonBean
     */
    @GET("common/hotCircleList")
    Observable<TagsCatchResult> getBcyTags(
            @Query("offset") String offset
    );

    /**
     * 获取 Tag  列表
     * @param offset 起始量（eg: offset=20）
     * @return JsonBean
     */
    @GET("common/hotCircleList")
    Call<TagsCatchResult> getBcyTagsCommon(
            @Query("offset") String offset
    );

    /**
     * 获取热门标签
     * @return JsonBean
     */
    @GET("common/hotTags")
    Observable<HotTagsCatchResult> getBcyHotTags( );

    /**
     * 获取日榜主页面的 Works
     * @param channelId 频道 Id（eg: channel_id=6618800694038102275）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=lastday）
     * @return JsonBean
     */
    @GET("rank/list/channelItemInfo")
    Observable<DailyMainPageResult> getBcyDailyMainPage(
            @Query("channel_id") String channelId,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType
    );

    /**
     * 获取日榜详细信息（Top100）
     * @param page 当前页数（eg: p=2）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=lastday）
     * @param date 日期（eg: date=20191202）
     * @return JsonBean
     */
    @GET("rank/list/itemInfo")
    Observable<DailyDetailsResult> getBcyDailyDetails(
            @Query("p") int page,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType,
            @Query("date") String date
    );

    /**
     * 获取周榜主页面的 Works
     * @param channelId 频道 Id（eg: channel_id=6618800694038102275）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=week）
     * @return JsonBean
     */
    @GET("rank/list/channelItemInfo")
    Observable<WeeklyMainPageResult> getBcyWeeklyMainPage(
            @Query("channel_id") String channelId,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType
    );

    /**
     * 获取周榜详细信息（Top100）
     * @param page 当前页数（eg: p=2）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=week）
     * @param date 日期（eg: date=20191202）
     * @return JsonBean
     */
    @GET("rank/list/itemInfo")
    Observable<WeeklyMainPageResult> getBcyWeeklyDetails(
            @Query("p") int page,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType,
            @Query("date") String date
    );

    /**
     * 获取新人榜主页面的 Works
     * @param channelId 频道 Id（eg: channel_id=6618800694038102275）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=newPeople）
     * @return JsonBean
     */
    @GET("rank/list/channelItemInfo")
    Observable<NewPeopleMainPageResult> getBcyNewPeopleMainPage(
            @Query("channel_id") String channelId,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType
    );

    /**
     * 获取新人榜详细信息（Top100）
     * @param page 当前页数（eg: p=2）
     * @param topicType 主题类型（eg: ttype=cos）
     * @param subType 子类型（eg: sub_type=newPeople）
     * @param date 日期（eg: date=20191202）
     * @return JsonBean
     */
    @GET("rank/list/itemInfo")
    Observable<NewPeopleDetailsResult> getBcyNewPeopleDetails(
            @Query("p") int page,
            @Query("ttype") String topicType,
            @Query("sub_type") String subType,
            @Query("date") String date
    );

    /**
     * 搜索关键词
     * @param keyWord 关键词（eg: "EMT"）
     * @return HTML-String
     */
    @GET("search/all")
    Observable<String> search(
            @Query("k") String keyWord
    );

    /**
     * RxJava 模式获取用户作品集
     * @param uid 用户UID（eg: uid=221571）
     * @param since 起始标记（eg: since=6290632689129119502）
     * @return JsonBean
     */
    @GET("user/selfPosts")
    Observable<UserWorksResult> getUserWorks(
            @Query("uid") String uid,
            @Query("since") String since
    );

    /**
     * 获取用户作品集
     * @param uid 用户UID（eg: uid=221571）
     * @param since 起始标记（eg: since=6290632689129119502）
     * @return JsonBean
     */
    @GET("user/selfPosts")
    Call<UserWorksResult> getUserWorksCommon(
            @Query("uid") String uid,
            @Query("since") String since
    );

}
